package com.triones.api.service.interlace;

import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.triones.api.entity.interlace.bo.*;
import com.triones.api.entity.interlace.bo.request.*;
import com.triones.api.entity.interlace.dto.InterlaceEstimateQuoteDO;
import com.triones.api.entity.interlace.dto.InterlaceInternalTransferDO;
import com.triones.api.entity.interlace.dto.InterlaceWalletCurrencyChainDO;
import com.triones.api.entity.interlace.vo.*;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * interlace 加密货币相关接口
 */
public interface InterlaceCryptoService {
    /**
     * 钱包币种列表
     *
     * @return
     */
    List<InterlaceBalancesVO> apiWalletCurrencyList();

    /**
     * 钱包币种链列表
     *
     * @param currency
     * @return
     */
    List<InterlaceCurrencyChainVO> apiWalletCurrencyChainList(String currency);

    /**
     * 钱包币种链详情
     *
     * @param id
     * @param chain
     * @return
     */
    InterlaceWalletCurrencyChainDO apiWalletCurrencyChainDetail(Long id, String chain);

    /**
     * 获取转账手续费及跨链额度
     *
     * @param bo
     * @return
     */
    CustomInterlaceTransfersFeeAndQuotaVO transfersFeeAndQuota(InterlaceTransfersFeeAndQuotaBO bo);

    /**
     * 转移
     *
     * @param id
     * @return
     */
    boolean transfers(Long id);

    /**
     * 估价询价
     *
     * @param bo
     * @return
     */
    InterlaceEstimateQuoteDO estimateQuote(InterlaceEstimateQuoteBO bo);

    /**
     * 文件上传
     *
     * @param request
     * @return
     */
    String updateFile(UploadFileRequest request);

    /**
     * KYC
     *
     * @param bo
     * @return
     */
    boolean kyc(InterlaceKycBO bo);

    /**
     * 内部转账加密货币调用第三方返回结果
     *
     * @param bo
     * @return
     */
    InterlaceInternalTransferDO internalTransferCrypto(InterlaceInternalTransferBO bo);

    /**
     * 获取一个钱包
     *
     * @param walletId
     * @return
     */
    Map getWallet(String walletId);

    /**
     * 初始化账户
     *
     * @param accountId
     * @return
     */
    Boolean initialization(String accountId);

    /**
     * 换汇
     *
     * @param id
     * @return
     */
    boolean convertTrades(Long id);

    /**
     * 子量子账户向子换汇账户转移
     *
     * @param request
     * @return
     */
    InterlaceInternalTransferDO quantumSubAccountToCryptoAssets(QuantumSubAccountToCryptoAssetsRequest request);

    /**
     * 子换汇账户向子量子账户转移
     */
    InterlaceInternalTransferDO cryptoAssetsToQuantumSubAccount(CryptoAssetsToQuantumSubAccountRequest request);

    /**
     * 检查是否kyc
     *
     * @return
     */
    Boolean checkIsKyc();

    /**
     * 获取kyc信息
     *
     * @return
     */
    InterlaceKycVO apiKycInfo();

    /**
     * 常用地址列表
     *
     * @param currency
     * @param chain
     * @param keyword
     * @return
     */
    List<InterlaceBlockchainAddressCatalogueVO> blockchainAddressCatalogueList(String currency, String chain, String keyword);

    /**
     * 子加密货币账户->主加密账户转移
     *
     * @param bo
     * @return
     */
    InterlaceInternalTransferDO cryptoAssetsToMasterWallet(HandleInternalTransferCryptoBO bo);

    /**
     * 主加密账户转移->子加密货币账户
     *
     * @param bo
     * @return
     */
    InterlaceInternalTransferDO masterWalletToCryptoAssets(HandleInternalTransferCryptoBO bo);

    /**
     * 子量子账户->主量子账户
     *
     * @param subAccountId
     * @return
     */
    InterlaceInternalTransferDO subAccountToMasterAccount(String subAccountId, BigDecimal amount);

    /**
     * 主量子账户->子量子账户
     *
     * @param subAccountId
     * @return
     */
    InterlaceInternalTransferDO masterAccountToSubAccount(String subAccountId, BigDecimal amount);

    /**
     * 量子账户交易列表（分页）
     * @param type
     * @param pageQuery
     * @return
     */
    TableDataInfo<CustomInterlaceQuantumTransferVO> internalQuantumTransferPageList(String type, PageQuery pageQuery);

    /**
     * 加密货币交易列表（分页）
     * @param currency
     * @param pageQuery
     * @return
     */
    TableDataInfo<InterlaceTransfersVO> internalCryptoTransferPageList(String currency, PageQuery pageQuery);

    /**
     * 量子账户交易详情
     * @param id
     * @return
     */
    CustomInterlaceQuantumTransferVO internalQuantumTransferDetail(Long id);

    /**
     * 加密货币交易详情
     * @param id
     * @return
     */
    CustomInterlaceTransfersVO internalCryptoTransferDetail(Long id);
}
